package com.bjpowernode.javase.exception;

import com.sun.security.jgss.GSSUtil;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

/*
关于try..catch中的finally字句：
    1、在finally字句中的代码最后执行，并且一定会执行，即使try语句块中的代码出现了异常。
        finallly字句必须和try..catch一起出现，不能单独编写
    2、finally语句通常使用在哪里拿？
    通常在finally语句块中完成资源的释放/关闭
    因为finally中的代码比较有保障。
    即使try语句块中的代码出现了异常finally中的代码也能正常执行。

 */
public class ExceptionTest10 {
    public static void main(String[] args) {

        //声明位置放到try外面
        FileInputStream fis = null;
        try {
            //创建输入流对象
            fis = new FileInputStream("F:\\postgraduate\\ana_start\\Java\\IDEA\\练习.txt");
            //...

            //空指针异常
            String s = null;
            s.toString();
            System.out.println("hello world");
            //流使用完需要关闭，因为流占用资源
            //fis.close();
        }catch(IOException e){
            e.printStackTrace();
        }catch(NullPointerException e){
            e.printStackTrace();
        }finally {
            System.out.println("hello 浩克");
            //流的关闭放到这里比较安全
            if(fis != null){//避免空指针异常关闭
                try{
                    //close方法有异常采用捕捉的方式
                    fis.close();
                }catch(IOException e){
                    e.printStackTrace();
                }
            }

        }
    }
}
